'use strict';

const Service = require('egg').Service;
const { Op } = require('sequelize');
const User = require('../model/user');

class UserService extends Service {
    /**
     * 获取用户列表
     * @param {object} params - 查询参数
     */
    async getUserList(params) {
        const { page, pageSize, role, status, keyword } = params;

        // 构建查询条件
        const where = {};

        // 角色筛选
        if (role) {
            where.role = role;
        }

        // 状态筛选
        if (status !== undefined) {
            where.status = status;
        }

        // 关键词搜索（用户名或邮箱）
        if (keyword) {
            where[Op.or] = [
                { username: { [Op.like]: `%${keyword}%` } },
                { email: { [Op.like]: `%${keyword}%` } },
                { nickname: { [Op.like]: `%${keyword}%` } }
            ];
        }

        try {
            // 查询总数
            const total = await User.count({ where });

            // 查询用户列表
            const users = await User.findAll({
                where,
                attributes: { exclude: ['password'] }, // 不返回密码
                offset: (page - 1) * pageSize,
                limit: pageSize,
                order: [['created_at', 'DESC']]
            });

            return {
                success: true,
                data: {
                    list: users,
                    total,
                    page,
                    pageSize,
                    totalPages: Math.ceil(total / pageSize)
                }
            };
        } catch (error) {
            console.error('获取用户列表失败:', error);
            return {
                success: false,
                message: '获取用户列表失败'
            };
        }
    }

    /**
     * 获取用户详情
     * @param {number} userId - 用户ID
     */
    async getUserDetail(userId) {
        try {
            const user = await User.findByPk(userId, {
                attributes: { exclude: ['password'] }
            });

            if (!user) {
                return {
                    success: false,
                    message: '用户不存在'
                };
            }

            return {
                success: true,
                data: user
            };
        } catch (error) {
            console.error('获取用户详情失败:', error);
            return {
                success: false,
                message: '获取用户详情失败'
            };
        }
    }

    /**
     * 更新用户状态
     * @param {number} userId - 用户ID
     * @param {number} status - 状态（1-正常，0-禁用）
     */
    async updateUserStatus(userId, status) {
        try {
            const user = await User.findByPk(userId);

            if (!user) {
                return {
                    success: false,
                    message: '用户不存在'
                };
            }

            await User.update(
                { status },
                { where: { id: userId } }
            );

            return {
                success: true,
                message: `用户${status === 1 ? '启用' : '禁用'}成功`
            };
        } catch (error) {
            console.error('更新用户状态失败:', error);
            return {
                success: false,
                message: '更新用户状态失败'
            };
        }
    }

    /**
     * 更新用户角色
     * @param {number} userId - 用户ID
     * @param {string} role - 角色（user/admin）
     */
    async updateUserRole(userId, role) {
        try {
            const user = await User.findByPk(userId);

            if (!user) {
                return {
                    success: false,
                    message: '用户不存在'
                };
            }

            if (!['user', 'admin'].includes(role)) {
                return {
                    success: false,
                    message: '无效的角色类型'
                };
            }

            await User.update(
                { role },
                { where: { id: userId } }
            );

            return {
                success: true,
                message: '用户角色更新成功',
                data: { role }
            };
        } catch (error) {
            console.error('更新用户角色失败:', error);
            return {
                success: false,
                message: '更新用户角色失败'
            };
        }
    }

    /**
     * 删除用户
     * @param {number} userId - 用户ID
     */
    async deleteUser(userId) {
        try {
            const user = await User.findByPk(userId);

            if (!user) {
                return {
                    success: false,
                    message: '用户不存在'
                };
            }

            // 不允许删除管理员
            if (user.role === 'admin') {
                return {
                    success: false,
                    message: '不能删除管理员账号'
                };
            }

            await User.destroy({
                where: { id: userId }
            });

            return {
                success: true,
                message: '用户删除成功'
            };
        } catch (error) {
            console.error('删除用户失败:', error);
            return {
                success: false,
                message: '删除用户失败'
            };
        }
    }

    /**
     * 获取用户统计信息
     */
    async getUserStats() {
        try {
            // 总用户数
            const totalUsers = await User.count();

            // 普通用户数
            const normalUsers = await User.count({
                where: { role: 'user' }
            });

            // 管理员数
            const adminUsers = await User.count({
                where: { role: 'admin' }
            });

            // 活跃用户数（状态为1）
            const activeUsers = await User.count({
                where: { status: 1 }
            });

            // 禁用用户数（状态为0）
            const disabledUsers = await User.count({
                where: { status: 0 }
            });

            // 今日新增用户
            const today = new Date();
            today.setHours(0, 0, 0, 0);
            const todayUsers = await User.count({
                where: {
                    created_at: {
                        [Op.gte]: today
                    }
                }
            });

            return {
                success: true,
                data: {
                    totalUsers,
                    normalUsers,
                    adminUsers,
                    activeUsers,
                    disabledUsers,
                    todayUsers
                }
            };
        } catch (error) {
            console.error('获取用户统计失败:', error);
            return {
                success: false,
                message: '获取用户统计失败'
            };
        }
    }
}

module.exports = UserService;

